package middleware

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

// ResponseMiddleware 统一处理接口响应格式，controller 只需设置 ctx.Set("responseData", data)
func ResponseMiddleware() gin.HandlerFunc {
	return func(ctx *gin.Context) {
		ctx.Next() // 先执行后续 handler

		// 如果已被中断（如已返回错误），则不再处理
		if ctx.IsAborted() {
			return
		}

		// 获取自定义 message
		message := "success"
		if msg, exists := ctx.Get("responseMessage"); exists {
			if str, ok := msg.(string); ok && str != "" {
				message = str
			}
		}

		// 获取业务 handler 设置的响应数据
		if data, exists := ctx.Get("responseData"); exists {
			ctx.JSON(http.StatusOK, gin.H{
				"code":    http.StatusOK,
				"message": message,
				"data":    data,
			})
		}
	}
}
